﻿using System;
using System.Collections.Generic;
using System.Text;
using Csla.Data;

namespace MinaspetroLibrary.AssociadoPack
{
    [Serializable()]
    public class AssociadoChildInfo : Csla.ReadOnlyBase<AssociadoChildInfo>
    {
        #region Business Properties and Methods

        //declare members

        private Guid _id = Guid.NewGuid();

        private string _numControle = string.Empty;

        private string _razaoSocial = string.Empty;

        private string _nomeFantasia = string.Empty;

        private int _idTipoCliente = 2;

        private string _descTipoCliente = string.Empty;

        private string _idEnderecoRevendedor = string.Empty;

        private string _idContatoRevendedor = string.Empty;

        private string _idEnderecoCorresp = string.Empty;

        private string _cnpj = string.Empty;

        private string _inscEstadual = string.Empty;

        private string _inscMunicipal = string.Empty;

        private string _cnpjLojaConv = string.Empty;

        private string _bandeiraLojaConv = string.Empty;

        private char _servOleo = 'N';

        private char _tipoPosto = 'N';

        private char _bandeiraPosto = 'N';

        private DateTime _dataContratoBandeira = DateTime.Now;

        private string _nomeContador = string.Empty;

        private string _escritorioContador = string.Empty;

        private string _idEnderecoContador = string.Empty;

        private string _idContatoContador = string.Empty;

        private DateTime _dataContador = DateTime.Now;

        private string _informanteContador = string.Empty;

        private string _observacoes = string.Empty;

        private DateTime _dataSolicitacao = DateTime.Now;

        private char _publicar = 'N'; //N por default

        [System.ComponentModel.DataObjectField(true, true)]
        public Guid Id
        {
            get
            {
                return _id;
            }
        }

        public string NumControle
        {
            get
            {
                return _numControle;
            }            
        }

        public string RazaoSocial
        {
            get
            {
                return _razaoSocial;
            }
        }

        public string NomeFantasia
        {
            get
            {
                return _nomeFantasia;
            }
        }

        public string IdEnderecoRevendedor
        {
            get
            {
               return _idEnderecoRevendedor;
            }
        }

        public int IdTipoCliente
        {
            get
            {
                return _idTipoCliente;
            }
        }

        public string DescTipoCliente
        {
            get
            {
                return _descTipoCliente.ToString();
            }
        }

        public string IdContatoRevendedor
        {
            get
            {
                return _idContatoRevendedor;
            }
        }

        public string IdEnderecoCorresp
        {
            get
            {
                return _idEnderecoCorresp;
            }
        }

        public string Cnpj
        {
            get
            {
                return _cnpj;
            }
        }

        public string InscEstadual
        {
            get
            {
                return _inscEstadual;
            }
        }

        public string InscMunicipal
        {
            get
            {
                return _inscMunicipal;
            }
        }

        public string CnpjLojaConv
        {
            get
            {
                return _cnpjLojaConv;
            }
        }

        public string BandeiraLojaConv
        {
            get
            {
                return _bandeiraLojaConv;
            }
        }

        public char ServOleo
        {
            get
            {
                return _servOleo;
            }
        }

        public char TipoPosto
        {
            get
            {
                return _tipoPosto;
            }
        }

        public char BandeiraPosto
        {
            get
            {
                return _bandeiraPosto;
            }
        }

        public DateTime DataContratoBandeira
        {
            get
            {
                return _dataContratoBandeira;
            }
        }

        public string DataContratoBandeiraShortString
        {
            get
            {
                return _dataContratoBandeira.ToString("dd/MM/yyyy");
            }
        }

        public string DataContratoBandeiraFullString
        {
            get
            {
                return _dataContratoBandeira.ToString("dd/MM/yyyy HH:mm");
            }
        }

        public string NomeContador
        {
            get
            {
                return _nomeContador;
            }
        }

        public string EscritorioContador
        {
            get
            {
                return _escritorioContador;
            }
        }

        public string IdEnderecoContador
        {
            get
            {
                return _idEnderecoContador;
            }
        }

        public string IdContatoContador
        {
            get
            {
                return _idContatoContador;
            }
        }

        public DateTime DataContador
        {
            get
            {
                return _dataContador;
            }
        }

        public string DataContadorShortString
        {
            get
            {
                return _dataContador.ToString("dd/MM/yyyy");
            }
        }

        public string DataContadorFullString
        {
            get
            {
                return _dataContador.ToString("dd/MM/yyyy HH:mm");
            }
        }

        public string InformanteContador
        {
            get
            {
                return _informanteContador;
            }
        }

        public string Observacoes
        {
            get
            {
                return _observacoes;
            }
        }

        public DateTime DataSolicitacao
        {
            get
            {
                return _dataSolicitacao;
            }
        }

        public string DataSolicitacaoShortString
        {
            get
            {
                return _dataSolicitacao.ToString("dd/MM/yyyy");
            }
        }

        public string DataSolicitacaoFullString
        {
            get
            {
                return _dataSolicitacao.ToString("dd/MM/yyyy HH:mm");
            }
        }

        public String Publicar
        {
            get
            {
                switch (_publicar)
                {
                    case 'N':
                        return "Novo";
                    case 'A':
                        return "Associado";
                    case 'P':
                        return "Pendente";
                    default:
                        return "-";
                }    
            }
        }


        protected override object GetIdValue()
        {
            return _id.ToString();
        }

        #endregion //Business Properties and Methods

        #region Authorization Rules
        protected override void AddAuthorizationRules()
        {
            //TODO: Define authorization rules in AssociadoChildInfo

        }

        #endregion //Authorization Rules

        #region Factory Methods
        internal static AssociadoChildInfo GetAssociadoChildInfo(SafeDataReader dr)
        {
            return new AssociadoChildInfo(dr);
        }

        private AssociadoChildInfo(SafeDataReader dr)
        {
            Fetch(dr);
        }
        #endregion //Factory Methods

        #region Data Access

        #region Data Access - Fetch
        private void Fetch(SafeDataReader dr)
        {
            FetchObject(dr);

            //load child object(s)
            FetchChildren(dr);

        }

        private void FetchObject(SafeDataReader dr)
        {
            _id = new Guid(dr["Id"].ToString());
            _numControle = dr.GetString("NumControle");
            _razaoSocial = dr.GetString("RazaoSocial");
            _nomeFantasia = dr.GetString("NomeFantasia");
            _idTipoCliente = dr.GetInt32("IdTipoCliente");
            _descTipoCliente = dr.GetString("DescTipoCliente");
            _idEnderecoRevendedor = dr.GetString("IdEnderecoRevendedor");
            _idContatoRevendedor = dr.GetString("IdContatoRevendedor");
            _idEnderecoCorresp = dr.GetString("IdEnderecoCorresp");
            _cnpj = dr.GetString("Cnpj");
            _inscMunicipal = dr.GetString("InscMunicipal");
            _inscEstadual = dr.GetString("InscEstadual");
            _cnpjLojaConv = dr.GetString("CnpjLojaConv");
            _bandeiraLojaConv = dr.GetString("BandeiraLojaConv");
            _servOleo = dr.GetChar("ServOleo");
            _tipoPosto = dr.GetChar("TipoPosto");
            _bandeiraPosto = dr.GetChar("BandeiraPosto");
            _dataContratoBandeira = dr.GetDateTime("DataContratoBandeira");
            _nomeContador = dr.GetString("NomeContador");
            _escritorioContador = dr.GetString("EscritorioContador");
            _idEnderecoContador = dr.GetString("IdEnderecoContador");
            _idContatoContador = dr.GetString("IdContatoContador");
            _dataContador = dr.GetDateTime("DataContador");
            _informanteContador = dr.GetString("InformanteContador");
            _observacoes = dr.GetString("Observacoes");
            _dataSolicitacao = dr.GetDateTime("DataSolicitacao");
            _publicar = dr.GetChar("Publicar");
        }

        private void FetchChildren(SafeDataReader dr)
        {
        }
        #endregion //Data Access - Fetch
        #endregion //Data Access
    }
}
